package com.iwhalecloud.bss.kite.cucc.service.attr.handler;

import com.iwhalecloud.bss.kite.common.util.KiteStringUtils;
import com.iwhalecloud.bss.kite.cucc.client.api.attr.IUnicomRegionService;
import com.iwhalecloud.bss.kite.cucc.client.dto.attr.UnicomRegion;
import com.iwhalecloud.bss.kite.cucc.client.dto.attr.UnicomRegionQry;
import com.iwhalecloud.bss.kite.manager.inst.KiteAttr;
import com.iwhalecloud.bss.kite.manager.inst.KiteAttrValue;
import com.iwhalecloud.bss.kite.manager.inst.KiteProdInst;
import com.iwhalecloud.bss.kite.service.attr.AttrData;
import com.iwhalecloud.bss.kite.service.attr.handler.AbstractAttrHandler;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

/**
 * @Classname LocalCityPlaceAttrHandler
 * @Description 五大双线落地方产品，城市属性处理，值为原单装机地址最后一级的值
 * @Author zhang.song
 * @Date 2021-07-15 20:59
 */
@Service
public class LocalCityPlaceAttrHandler extends AbstractAttrHandler<KiteProdInst, AttrData> {

    private static int[] LOCATION_TPYE_ARR = new int[]{2, 1, 3};

    @Resource
    private IUnicomRegionService unicomRegionService;

    @Override
    public void before(KiteAttr attr, KiteProdInst inst, String value, AttrData data) {
        if(KiteStringUtils.isNotEmpty(value)) {
            String valueDesc = this.getValueDesc(attr, null, value, null);

            List<KiteAttrValue> kiteAttrValues = new ArrayList<>();
            KiteAttrValue kiteAttrValue = new KiteAttrValue();
            kiteAttrValue.setAttrValue(value);
            kiteAttrValue.setAttrValueName(KiteStringUtils.isEmpty(valueDesc) ? value : valueDesc);
            kiteAttrValues.add(kiteAttrValue);

            attr.setAttrValues(kiteAttrValues);
            attr.setValueDesc(valueDesc);
        }

        super.before(attr, inst, value, data);
    }

    /**
     * 获取页面展示名称
     *
     * @param attr 实例属性入参
     * @param inst 当前操作的实例对象
     * @param value 设置的值
     * @param data 属性处理入参，可以根据需要传入需要的业务数据
     * @return 属性页面展示名称
     */
    @Override
    public String getValueDesc(KiteAttr attr, KiteProdInst inst, String value, AttrData data) {
        if (KiteStringUtils.isEmpty(value)) {
            return value;
        }

        UnicomRegionQry unicomRegionQry = new UnicomRegionQry();
        // LOCATION_TPYE_ARR：查询区域类型 10：省；20：市；30：区县，新需求只有地市，兼容旧数据，如果地市没数据，再查省、区县
        for (int i = 0; i < LOCATION_TPYE_ARR.length; i++) {
            unicomRegionQry.setLocationType(String.valueOf(LOCATION_TPYE_ARR[i] * 10));
            List<UnicomRegion> list = unicomRegionService.innerSubRegionFromPlatform(unicomRegionQry);
            if(list != null && list.size() > 0) {
                String valueDesc = Optional.ofNullable(list.stream().filter(unicomRegion ->
                    KiteStringUtils.isEqual(value, unicomRegion.getRegionCode())).findAny().orElse(null))
                    .map(UnicomRegion::getRegionName).orElse(null);

                if(KiteStringUtils.isNotEmpty(valueDesc)) {
                    List<KiteAttrValue> kiteAttrValues = attr.getAttrValues();
                    if(!kiteAttrValues.stream().anyMatch(kiteAttrValue -> KiteStringUtils.isEqual(value, kiteAttrValue.getAttrValue()))) {
                        KiteAttrValue kiteAttrValue = new KiteAttrValue();
                        kiteAttrValue.setAttrValue(value);
                        kiteAttrValue.setAttrValueName(valueDesc);
                        kiteAttrValues.add(kiteAttrValue);

                        attr.setAttrValues(kiteAttrValues);
                    }
                    attr.setValueDesc(valueDesc);
                    return valueDesc;
                }
            }
        }
        return null;
    }
}
